package br.com.virtual.base.controller.cadastro;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.com.virtual.base.controller.util.VirtualMB;
import br.com.virtual.base.enums.ActionFormEnum;
import br.com.virtual.base.enums.TipoUsuarioEnum;
import br.com.virtual.base.exceptions.VirtualValidationException;
import br.com.virtual.cadastrar.model.Usuario;
import br.com.virtual.cadastrar.service.UsuarioService;
import br.com.virtual.replicar.service.ReplicadorPreparadorEntidade;

@ManagedBean
@ViewScoped
public class UsuarioMB extends VirtualMB {

	private static final long serialVersionUID = 1L;
	private Usuario usuario;
	private List<Usuario> usuarios;
	private List<Usuario> usuariosAtivos;
	private List<SelectItem> tiposUsuario;

	private ActionFormEnum stateForm = ActionFormEnum.CREATE;

	@EJB
	private UsuarioService usuarioService;
	
	
	@EJB ReplicadorPreparadorEntidade rpl;
	
	@PostConstruct
	private void init() {
		
//		rpl.iniciarReplicacao();
		
		this.autenticacaoService.autenticarUsuario("henriqueldcs@hotmail.com", "1");
		
		usuario = new Usuario();
		usuarios = null;
		stateForm = ActionFormEnum.CREATE;
	}

	public void save() {

		try {

			if (stateForm.equals(ActionFormEnum.CREATE))
				usuarioService.create(usuario);
			else if (stateForm.equals(ActionFormEnum.UPDATE))
				usuarioService.update(usuario);

			addFacesMessage("Operação realizada com sucesso.",
					FacesMessage.SEVERITY_INFO, "");

		} catch (VirtualValidationException e) {

			for (String s : e.getErros()) {
				addFacesMessage(s, FacesMessage.SEVERITY_ERROR, "");
			}

		}

		init();
	}

	public void edit() {
		stateForm = ActionFormEnum.UPDATE;
	}

	public String delete(ActionEvent evento) {

		try {
			usuarioService.delete(usuario);
			addFacesMessage("Item excluido com sucesso.",
					FacesMessage.SEVERITY_INFO, "");

		} catch (VirtualValidationException e) {

			for (String s : e.getErros()) {
				addFacesMessage(s, FacesMessage.SEVERITY_ERROR, "");
			}

		}
		init();
		return "";
	}


	/*
	 * GETTERS AND SETTERS
	 */
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getUsuarios() {
		if (usuarios == null) {
			usuarios = usuarioService.getList();
			// Collections.sort(usuarios);
		}

		return usuarios;
	}

	public void setUsuarios(List<Usuario> listCat) {
		this.usuarios = listCat;
	}

	public List<Usuario> getUsuariosAtivos() {

		if (usuariosAtivos == null) {
			usuariosAtivos = usuarioService.getListAtivo();
			// Collections.sort(usuariosAtivos);
		}
		return usuariosAtivos;
	}

	public void setUsuariosAtivos(List<Usuario> usuariosAtivos) {
		this.usuariosAtivos = usuariosAtivos;
	}

	public ActionFormEnum getStateForm() {
		return stateForm;
	}

	public void setStateForm(ActionFormEnum stateForm) {
		this.stateForm = stateForm;
	}

	public List<SelectItem> getTiposUsuario() {

		if (tiposUsuario == null) {
			tiposUsuario = new ArrayList<SelectItem>();
			for (TipoUsuarioEnum t : TipoUsuarioEnum.values()) {
				tiposUsuario.add(new SelectItem(t, t.getNome()));
			}
		}
		return tiposUsuario;
	}

	public void setTiposUsuario(List<SelectItem> tiposUsuario) {
		this.tiposUsuario = tiposUsuario;
	}

}
